package com.keitaitoys.fonteditor.io;

import java.util.TreeSet;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

import com.keitaitoys.fonteditor.font.Font;

@XmlRootElement(name="font")
@XmlAccessorType(XmlAccessType.NONE)
@XmlType(propOrder={"image","size","spacing","leading","symbols"})
public class XMLFont {

	//////////////////////////////////////////////////////////////////////
	// Description ///////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	//////////////////////////////////////////////////////////////////////
	// Consts ////////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	//////////////////////////////////////////////////////////////////////
	// Variables /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

//	@XmlAttribute(name="image")
	@XmlElement(name="image")
	private String image;

//	@XmlAttribute(name="size")
	@XmlElement(name="size")
	private int size;
	
//	@XmlAttribute(name="spacing")
	@XmlElement(name="spacing")
	private int spacing;
	
//	@XmlAttribute(name="leading")
	@XmlElement(name="leading")
	private int leading;

	@XmlElement(name="symbol")
	private TreeSet<XMLSymbol> symbols;
	
	//////////////////////////////////////////////////////////////////////
	// Constructor ///////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public XMLFont() {

		this(null, Font.DEFAULT_SIZE, Font.DEFAULT_SPACING, Font.DEFAULT_LEADING, new TreeSet<XMLSymbol>());
	}

	//////////////////////////////////////////////////////////////////////
	// Constructor ///////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public XMLFont(String image, int size, int spacing, int leading, TreeSet<XMLSymbol> symbols) {

		this.image = image;
		
		this.size = size;
		this.spacing = spacing;
		this.leading = leading;
		
		this.symbols = symbols; 
	}

	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public String getImage() {
		
		return image;
	}
	
	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public void setImage(String image) {
		
		this.image = image;
	}
	
	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public int getSize() {
		
		return size;
	}
	
	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public void setSize(int size) {
		
		this.size = size;
	}
	
	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public int getSpacing() {
		
		return spacing;
	}
	
	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public void setSpacing(int spacing) {
		
		this.spacing = spacing;
	}
	
	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public int getLeading() {
		
		return leading;
	}
	
	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public void setLeading(int leading) {
		
		this.leading = leading;
	}
	
	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public TreeSet<XMLSymbol> getSymbols() {
		
		return symbols;
	}
	
	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public void setSymbols(TreeSet<XMLSymbol> symbols) {
		
		this.symbols = symbols;
	}

	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public String toString() {
		
    	StringBuffer stringBuffer = new StringBuffer();
    	
    	stringBuffer.append(getClass().getName());
    	stringBuffer.append("[");
    	stringBuffer.append("image=" + image);    	
    	stringBuffer.append(",");
    	stringBuffer.append("size=" + size);    	
    	stringBuffer.append(",");
    	stringBuffer.append("spacing=" + spacing);
    	stringBuffer.append(",");
    	stringBuffer.append("leading=" + leading);
    	stringBuffer.append(",");
    	stringBuffer.append("symbols=");
    	stringBuffer.append("\n");
    	
    	for(XMLSymbol symbol : symbols) {
        	stringBuffer.append("\t");
        	stringBuffer.append(symbol.toString());    	
        	stringBuffer.append("\n");
    	}

    	stringBuffer.append("]");    	

    	return stringBuffer.toString();
	}
}